package com.example.comment.convert;

import com.example.comment.base.dto.CommentAddDTO;
import com.example.comment.base.entity.Comment;
import com.example.comment.base.vo.CommentVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * @author QingZeyu
 * @date 2024/5/6 14:08
 */
@Mapper
public interface CommentConvert {
    CommentConvert INSTANCE = Mappers.getMapper(CommentConvert.class);

    /**
     * 将Comment实体转换为CommentVO视图对象
     *
     * @param comment 代表一个评论的实体对象，包含评论的基本信息
     * @return 返回一个CommentVO对象，它包含了与评论相关的视图信息
     */
    @Named("convertToVO")
    CommentVO convertToVO(Comment comment);

    @Named("convertToComment")
    @Mapping(source = "commentId",target = "parentId")
    @Mapping(source = "commentId",target = "rootId")
    Comment convertToComment(CommentAddDTO commentAddDTO);

    /**
     * 将评论实体列表转换为评论视图对象列表
     *
     * @param comments 评论实体列表，包含一系列Comment类型的评论对象
     * @return 返回一个CommentVO类型的列表，其中每个元素都是根据对应的Comment实体转换而来的
     */
    @Named("convertToVOList")
    List<CommentVO> convertToVOList(List<Comment> comments);

    @Named("convertToReplyVO")
    CommentVO.CommentReplyVO convertToReplyVO(Comment comment);

    @Named("convertToReplyVOList")
    List<CommentVO.CommentReplyVO> convertToReplyVOList(List<Comment> comments);
}
